<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>19. 对props进行限制</title>
</head>

<body>
    <!-- 准备好一个容器 -->
    <div id="app1"></div>
    <div id="app2"></div>
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom 用于支持 react 操作 dom -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入 label，用于将 jsx 转化为 js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <!-- 引入 prop-types，用于对于组件标签属性进行限制 -->
    <script type="text/javascript" src="../js/prop-types.js"></script>

    <!-- 此处必须写 text/babel -->
    <script type="text/babel">

        class Boy extends React.Component {

            render() {
                let {name, age, sex} = this.props
                return (
                    <ul>
                        <li>姓名：{name}</li>
                        <li>性别：{sex}</li>
                        <li>年龄：{age + 1}</li>
                    </ul>
                )
            }
        }

        // 对标签属性进行类型、必要性限制
        Boy.propTypes = {
            // name: React.PropTypes.string
            name: PropTypes.string.isRequired,  // 限制name必传且为字符串
            sex: PropTypes.string,   // 限制性别为字符串
            age: PropTypes.number,   // 限制年龄为数字
            speak: PropTypes.func    // 限制 speak 为方法
        }
        // 对标签属性默认值设置
        Boy.defaultProps = {
            sex: '未知',  // sex 不传入，则设置默认值为 未知
            age: 0  // age 不传入，则设置默认值为 0
        }

        // 批量传入
        const boy = { name: '王肖杰', sex: '男', age: 10 }

        function speak() {
            console.log("这是一个方法")
        }

        ReactDOM.render(<Boy {...boy} />, document.getElementById('app1'))
        // ReactDOM.render(<Boy name="王肖洛" sex="男" age={9} />, document.getElementById('app2'))
        ReactDOM.render(<Boy age='9' speak={speak} />, document.getElementById('app2'))

    </script>

</body>

</html>